﻿using System;
using System.Linq;

namespace SksApp
{
    public struct BarkodVeri
    {
        public decimal Miktar { get; set; }
        public string Barkod { get; set; }
        public bool FiyatKullanildi { get; set; }
    }

    public class BarkodCevirim
    {

        public static bool Terazilimi(string barkod)
        {
            bool sonuc = false;
            using (SksEntity ent = new SksEntity())
            {
                string bayrak = barkod.Length > 2 ? barkod.Substring(0, 2) : barkod;
                var result = (from b in ent.BarkodTipleri where b.Bayrak == bayrak select b).FirstOrDefault();
                if (result != null)
                {
                    sonuc = true;
                }
            }
            return sonuc;
        }

        public static BarkodVeri Parse(string veri)
        {
            try
            {
                if (veri.Length > 2)
                {
                    string bayrak = veri.Substring(0, 2);
                    using (SksEntity ent = new SksEntity())
                    {
                        var result = (from b in ent.BarkodTipleri where b.Bayrak == bayrak select b).FirstOrDefault();
                        if (result != null)
                        {
                            BarkodVeri brk = new BarkodVeri();
                            if (result.Tip == 0) //fiyat ise
                            {
                                brk.Miktar = Cevir.Parse<decimal>(veri.Substring(result.DataBaslangic - 1));
                                brk.Barkod = veri.Substring(result.PluBaslangic - 1, result.PluUzunluk);
                                brk.FiyatKullanildi = true;
                                return brk;
                            }
                            else
                                if (veri.Length == result.PluUzunluk + result.DataUzunluk + 1)
                                {
                                    brk.Miktar = Cevir.Parse<decimal>(veri.Substring(result.DataBaslangic - 1, result.DataUzunluk)) / result.Carpan;
                                    brk.Barkod = veri.Substring(result.PluBaslangic - 1, result.PluUzunluk);
                                    brk.FiyatKullanildi = false;
                                    return brk;
                                }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }

            return new BarkodVeri() { Barkod = veri, Miktar = 0 };
        }

        public static int CalculateChecksumDigit(string barkod)
        {
            string sTemp = barkod;
            int iSum = 0;
            int iDigit = 0;
            for (int i = sTemp.Length; i >= 1; i--)
            {
                iDigit = Convert.ToInt32(sTemp.Substring(i - 1, 1));
                if (i % 2 == 0)
                {
                    iSum += iDigit * 3;
                }
                else
                {
                    iSum += iDigit * 1;
                }
            }

            int iCheckSum = (10 - (iSum % 10)) % 10;
            return iCheckSum;
        }
    }
}
